/*
 * Copyright (c)  2015~2020, xforceplus
 * All rights reserved.
 * Project:datacare-orm
 * Id: StringSqlTemplateLoader.java   2020-09-28 23-44-36
 * Author: Evan
 */
package cn.datacare.orm.engine;

import cn.datacare.orm.loader.SQLLoader;
import cn.datacare.orm.source.SQLSource;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Resource;
import org.beetl.core.ResourceLoader;

/**
 * <p>
 * Title:
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: 2015~2020
 * </p>
 * <p>
 * Company/Department: xforceplus
 * </p>
 *
 * @author Evan
 * <b>Creation Time:</b> 2020-09-28 23-44-36
 * @since V1.0
 */
public class StringSqlTemplateLoader implements ResourceLoader {

    /**
     * SQLLoader
     */
    private SQLLoader sqlLoader;
    /**
     * 是否自动检查
     */
    private Boolean autoCheck;

    /***
     * 检查文件
     * @param sqlLoader  SQLLoader
     * @param autoCheck autoCheck
     */
    public StringSqlTemplateLoader(SQLLoader sqlLoader, Boolean autoCheck) {
        this.sqlLoader = sqlLoader;
        this.autoCheck = autoCheck;
    }

    /**
     * 根据key获取Resource
     *
     * @param key
     * @return
     */
    @Override
    public Resource getResource(String key) {
        SQLSource source = sqlLoader.getSQL(key);
        if (source == null) {
            /**
             * 这是一个并发bug暂时修复，参考https://gitee.com/xiandafu/beetlsql/issues/IKFGA
             *
             * sqlManager.refresh被别的线程清空了，这里得到的是空模板,现在返回一个空
             */
            return new SqlTemplateResource(key,this,source);

        }
        return new SqlTemplateResource(key,this,source);
    }

    /**
     * 检测模板是否更改，每次渲染模板前，都需要调用此方法，所以此方法不能占用太多时间，否则会影响渲染功能
     *
     * @param key
     * @return
     */
    @Override
    public boolean isModified(Resource key) {
        return false;
    }

    @Override
    public boolean exist(String key) {
        return false;
    }

    /**
     * 关闭ResouceLoader，通常是GroupTemplate关闭的时候也关闭对应的ResourceLoader
     */
    @Override
    public void close() {

    }

    /**
     * 一些初始化方法
     *
     * @param gt
     */
    @Override
    public void init(GroupTemplate gt) {

    }

    /**
     * 用于include，layout等根据相对路径计算资源实际的位置.
     *
     * @param resource 当前资源
     * @param key
     * @return
     */
    @Override
    public String getResourceId(Resource resource, String key) {
        return null;
    }

    /**
     * 得到资源加载器说明，用于获取不到资源的时候输出提示信息
     *
     * @return
     */
    @Override
    public String getInfo() {
        return null;
    }
}
